package org.ala.tiktools.sharddb.mybatis.transaction;

import org.ala.tiktools.sharddb.mybatis.executor.ShardExecutor;
import org.ala.tiktools.sharddb.tx.IShardTransaction;
import org.ala.tiktools.sharddb.tx.ShardTransaction;

import java.util.List;

/**
 * 事务补偿
 * <p>  事务在预提交阶段的错误直接回滚即可
 * <p>  但在提交阶段如果某个事务出错了（commit阶段网络闪断等等，都有可能）
 * <p>  此时对于已经成功commit的事务，需要手动补偿（撤销或最终一致自行决定）
 *
 * @author ala
 * @date 2025-02-20 09:19
 */
public interface IShardCompensation {
    /**
     *  空值
     */
    public final static IShardTransaction NULL = new ShardTransaction(){};


    /**
     *  执行补偿
     */
    void doCompensation(List<ShardExecutor.Result> successes, List<ShardExecutor.Result> failies);
}
